package com.xxx.rpc.client;

import com.xxx.rpc.common.bean.RpcRequest;
import com.xxx.rpc.common.bean.RpcResponse;
import com.xxx.rpc.registry.ServiceDiscovery;

/**
 * RPC 客户端（用于发送 RPC 请求）
 *
 * @author huangyong & Rosun
 * @since 1.0.0
 */
public interface RpcClient {
 

    /**
     * 内部通过Bootstrap建立长链接NioSocketChannel ;内部自定义channel 处理 pipeline
     * @param host
     * @param port
     * @throws Exception
     */
    public void initLongConnection( String host, int port) throws Exception  ;
    
    /**
     * 关闭长链接
     */
    public void closeLongConnection() ;
    
    /**
     * 发送请求-异步(永不超时)
     * @param request
     * @return
     * @throws Exception
     */
    public RpcResponse send(final RpcRequest request) throws Exception  ;
    
    /**
     * 发送请求-异步（支持超时）
     * @param request
     * @param timeout 超时， 毫秒
     * @return
     * @throws Exception
     */
    public RpcResponse send(final RpcRequest request,long timeout) throws Exception  ;
    
    
    
    /**
     * 清理资源内存回收；
     */
    public void destroy();
    
    
    /**
     * 设置 服务发现接口的 指针，以便链接失效时回调。
     * @param point 
     */
    public void setServiceDiscoveryPoint(ServiceDiscovery point);
}
